<?php

namespace app\common;

class SkuGenerator
{
    // 类别码，可以根据实际情况定义
    private const CATEGORY_PRODUCT_CODE = 'G';
    private const CATEGORY_ATTACHMENT_CODE = 'A';

    // 序列号长度
    private const SERIAL_LENGTH = 4;

    // 随机数长度
    private const RANDOM_LENGTH = 4;

    // 总长度
    private const TOTAL_LENGTH = 30; // 时间戳 + 随机数 + 序列号 + 类别码

    public function generateSku(int $type = 1)
    {
        // 获取当前时间的时间戳
        $timestamp = date('Ymdis'); // YYYYMMDD

        // 生成随机数，只包含大写字母
        $randomPart = '';
        $letters = range('A', 'Z'); // 生成大写字母数组

        for ($i = 0; $i < self::RANDOM_LENGTH; $i++) {
            $randomIndex = random_int(0, count($letters) - 1); // 生成随机索引
            $randomPart .= $letters[$randomIndex]; // 选择对应的大写字母
        }

        // 生成序列号，只包含大写字母
        $serialPart = '';
        for ($i = 0; $i < self::SERIAL_LENGTH; $i++) {
            $randomIndex = random_int(0, count($letters) - 1); // 生成随机索引
            $serialPart .= $letters[$randomIndex]; // 选择对应的大写字母
        }

        if ($type == 1) {
            $type = self::CATEGORY_PRODUCT_CODE;
        } else {
            $type = self::CATEGORY_ATTACHMENT_CODE;
        }

        // 组合SKU
        $sku = $timestamp . $randomPart . $serialPart . $type;

        return substr($sku, 0, self::TOTAL_LENGTH); // 截取总长度
    }
}
